class BlContainerHistory < ActiveRecord::Base
  belongs_to :bl_container

  #集装箱历史的轨迹gps
  def self.ctn_history_gps(ctn_history)
    if ctn_history.size > 0
      #分析出时间段
      period = []
      period1 = {} #第一阶段（拍车、出场、运抵客户、入场阶段）
      period2 = {} #第二阶段（集港、到港阶段）
                   #开始分析
      states_start1 = [ContainerStatusEnum.get_enum(:out_cy).label,
                       ContainerStatusEnum.get_enum(:send_car).label,
                       ContainerStatusEnum.get_enum(:deliver_to_client).label]
      states_start2 = [ContainerStatusEnum.get_enum(:centralize_on_port).label]

      states_end1 = [ContainerStatusEnum.get_enum(:in_cy).label,
                     ContainerStatusEnum.get_enum(:send_car).label,
                     ContainerStatusEnum.get_enum(:deliver_to_client).label]
      states_end2 = [ContainerStatusEnum.get_enum(:export_arrive_port).label]

      ctn_history.each_index do |index|
        his = ctn_history[index]
        vehicle_no = his.vehicle_no
        if vehicle_no and !vehicle_no.strip.empty?
          #如果动作在第一个开始时间数组中，而且第一阶段的开始时间没有设置，目前对象的时间不为空
          #则认为当前时间为第一阶段开始时间
          if states_start1.include?(his.action) and !period1[:start] and his.time
            period1[:start] = his.time
          end
          #如果动作在第一个结束时间数组中，而且目前对象的时间不为空
          #则认为当前时间为第一阶段结束时间
          if  states_end1.include?(his.action) and his.time
            period1[:end] = his.time
            period1[:vehicle_no] = vehicle_no
          end

          #如果动作在第二个开始时间数组中，而且第二阶段的开始时间没有设置，目前对象的时间不为空
          #则认为当前时间为第二阶段开始时间
          if states_start2.include?(his.action) and !period2[:start] and his.time
            period2[:start] = his.time
          end
          #如果动作在第二个结束时间数组中，而且目前对象的时间不为空
          #则认为当前时间为第二阶段结束时间
          if  states_end2.include?(his.action) and his.time
            period2[:end] = his.time
            period2[:vehicle_no] = his.vehicle_no
          end
        end
      end
      if period1[:start] and period1[:end] and period1[:vehicle_no]
        period << period1
      end
      if period2[:start] and period2[:end] and period2[:vehicle_no]
        period << period2
      end
                   #时间段取值结束，结果为数组
                   #格式[{:start=>time1, :end=>time2, :vehicle_no=>'lk001'},{:start=>time1, :end=>time2, :vehicle_no=>'lk001'}]

                   #根据时间段取gps数据
      gps_array = []
      period.each do |period|
        rst = GpsHistory.query_gps_history_in_period period
        gps_array.concat rst if rst
      end

      return gps_array
    end
  end

end
